import java.util.HashMap;
import java.util.logging.Level;

/**
 * @Description: 有效的字母异位词
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
 * <p>
 * 注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。
 * @Date:Create in 10:51  2022/7/1
 */
public class isAnagram0242 {

    public static void main(String[] args) {
        String s = "a", t = "ab";
        System.out.println(isAnagram1(s,t));
    }

    //哈希表的暴力解法
    public static boolean isAnagram1(String s, String t) {
        HashMap<Character, Integer> map = new HashMap<>();
        int size1 = s.length();
        int size2 = t.length();
        for (int i = 0; i < size1; i++) {
            if (!map.containsKey(s.charAt(i))) {
                map.put(s.charAt(i), 1);
            } else {
                map.replace(s.charAt(i), map.get(s.charAt(i)) + 1);
            }
        }
        for (int j = 0; j < size2; j++) {
            if (map.containsKey(t.charAt(j))) {
                map.replace(t.charAt(j), map.get(t.charAt(j)) - 1);
                if(map.get(t.charAt(j))==0) map.remove(t.charAt(j));
            }else {
                return false;
            }
        }
        if(map.isEmpty()){
            return true;
        }
        return false;
    }

    //数组代替哈希表
    public static boolean isAnagram2(String s, String t) {
        int[] record = new int[26];
        for(char a:s.toCharArray()){
            record[a-'a'] += 1;
        }
        for(char b :t.toCharArray()){
            record[b-'a'] -=1;
        }
        for(int i:record){
            if(i!=0){
                return false;
            }
        }
        return true;
    }
}
